// 把用户模块的路由处理程序放在这个文件中
// 导入db文件
const db = require("../db/index");
const bcrypt = require("bcryptjs");
// 导入 jwt包
const jwt = require("jsonwebtoken");
// 导入配置文件
const config = require("../config");

// 注册用户
const reguser = (req, res) => {
  // 获取客户端提交过来的表单数据
  const userInfo = req.body;
  // 1. 判断数据是否合法
  //   if (!userInfo.username || !userInfo.password) return res.send({ status: 1, message: "用户名和密码不正确" });
  // 2. 判断用户名是否已经被注册过了
  const sql = "select * from ev_users where username=?";
  db.query(sql, userInfo.username, (err, data) => {
    // if (err) return res.send({ status: 1, message: err.message });
    if (err) return res.cc(err);
    // 表示有数据
    // if (data.length > 0) return res.send({ status: 1, message: "用户名被占用，请更换其他用户名" });
    if (data.length > 0) return res.cc("用户名被占用，请更换其他用户名");
    // 3. 注册
    //   res.send("注册用户1");
    userInfo.password = bcrypt.hashSync(userInfo.password, 10);
    // 把数据写入到数据表中
    const insertSql = "INSERT INTO ev_users set ?";

    db.query(insertSql, { username: userInfo.username, password: userInfo.password }, (err, data) => {
      // if (err) return res.send({ status: 1, message: err.message });
      if (err) return res.cc(err);
      // if (data.affectedRows !== 1) return res.send({ status: 1, message: "注册失败" });
      if (data.affectedRows !== 1) return res.cc("注册失败");
      // 表示数据已经写入到对应的数据表中了
      // res.send({ status: 0, message: "注册成功" });
      res.cc("注册成功", 0);
    });
  });
};

// 登录功能
const login = (req, res) => {
  // 获取表单提交过来的数据
  const userInfo = req.body;
  // 需要根据用户名去数据库将这条用户的数据查询出来
  const selectSql = "select * from ev_users where username = ?";
  // 执行sql语句
  db.query(selectSql, userInfo.username, (err, data) => {
    // sql语句出问题
    if (err) return res.cc(err);
    // 查询用户 如果data的长度不等于1 就提示用户登录失败
    if (data.length !== 1) res.cc("登录失败");
    // 表示用户名输入正确 就需要进行密码比对
    // console.log(data[0].password);
    // 拿着用户输入的密码,和数据库中存储的密码进行对比
    const compareResult = bcrypt.compareSync(userInfo.password, data[0].password);
    // console.log(compareResult);
    // 密码比对
    if (!compareResult) {
      return res.cc("登录失败！");
    }
    // 用户的数据
    const user = { ...data[0], password: "", user_pic: "" };
    // 生成token
    const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: config.expiresIn });
    // 将token字符串相应给客户端
    res.send({
      status: 0,
      message: "登录成功",
      token: `Bearer ${tokenStr}`
    });
  });
};
// 外向暴露
module.exports = {
  reguser,
  login
};
